/*
 * MIT License
 *
 * Copyright (c) 2020 wen.gu <454727014@qq.com>
 *
 * Permission is hereby granted, free of charge, to any person obtaining a copy
 * of this software and associated documentation files (the "Software"), to deal
 * in the Software without restriction, including without limitation the rights
 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 * copies of the Software, and to permit persons to whom the Software is
 * furnished to do so, subject to the following conditions:
 *
 * The above copyright notice and this permission notice shall be included in all
 * copies or substantial portions of the Software.
 *
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
 * SOFTWARE.
 */

/***************************************************************************
* Name: video_render_test.cpp
*
* Purpose: video render test case
*
* Developer:
*   wen.gu , 2018-12-28
*
* TODO:
*
***************************************************************************/

/******************************************************************************
**    INCLUDES
******************************************************************************/
#define _CRT_SECURE_NO_WARNINGS
#include <Windows.h>
#include <stdio.h>
#include <string>

#include "mp_plugin.h"
#include "mp_plugin_manager.h"
#include "mp_video_sink.h"
#include "mp_audio_sink.h"


#define LOG_TAG "vidRT"
#include "mp_log.h"

/******************************************************************************
**    MACROS
******************************************************************************/



/******************************************************************************
**    VARIABLE DEFINITIONS
******************************************************************************/


/******************************************************************************
**   FUNCTION DEFINITIONS
******************************************************************************/



void videoRenderTest()
{
    MPPluginManager& amp = MPPluginManager::getInstance();
    MPVideoSink* mpv = nullptr;
    MPVideoSinkCreateParam mpvi;
    int pixel_w = 320;
    int pixel_h = 180;
    MPTrackInfo& ti = mpvi.info;
    ti.category = eMediaCategory::Video;
    ti.format = eMediaFormat::YUV420Planar;
    ti.video.picWidth = 320;
    ti.video.picHeight = 180;

    MPError ret = amp.load("win32Render.dll");


    ret = amp.find(&mpvi, (MPComponent**)&mpv);

    if (MP_OK == ret)
    {
        FILE* fp = fopen("test_yuv420p_320x180.yuv", "rb+");

        if (fp)
        {
            while (1)
            {
                MPBuffer* frame = new MPBuffer((uint32_t)(pixel_w * pixel_h * 3 / 2));

                if (fread(frame->data(), 1, pixel_w*pixel_h * 3 / 2, fp) != pixel_w * pixel_h * 3 / 2)
                {
                    // Loop
                    fseek(fp, 0, SEEK_SET);
                    fread(frame->data(), 1, pixel_w * pixel_h * 3 / 2, fp);
                }



                BufferInfo& bi = frame->info();
                bi.category = eMediaCategory::Video;
                bi.format = eMediaFormat::YUV420Planar;
                bi.video.picHeight = 180;
                bi.video.picWidth = 320;

                mpv->display(frame);
                Sleep(40);

                frame->release();
            }
        }

        fclose(fp);
    }

    if (mpv)
    {
        delete mpv;
    }
}